unity3d接入360sdk制作的手游接完支付sdk后运行在手机上 支付后游戏画面变暗怎么解决?

哪里的支付SDK比较好?做手游开发的,需要用起来方便快捷。_百度知道
哪里的支付SDK比较好?做手游开发的,需要用起来方便快捷。
建议可以考虑下蜂巢科技的手游支付SDK,目前这家稍微成熟点。附注:支付SDK是4399手机开放平台提供的一种游戏内道具销售的服务,玩家购买道具并支付相应的金额,会为开发者带来收益,而且支付SDK还提供了充值总额统计和充值明细统计,更好的掌握玩家充值情况。
其他类似问题
为您推荐:
提问者采纳
一是无需第三支付工具账号;三是为信誉好的开发商提供预先结算的服务。手机短信就能实现支付;二是无需离开游戏即可支付。SYSDK有三大特色,几句代码就可以搞定集了成三大运营商和支付宝的SDK。个人觉得这手游支付SDK还是很不错的,让用户玩得更爽建议是蜂巢科技的手游支付SDK.,无需绑定信用卡,付费方式也更多,解决资金周转困难的问题
提问者评价
其他2条回答
我业余做一下小应用都是用这个来做的题主,他的支付sdk非常简单方便,我强烈建议你用比目科技的后端云服务,可以让你做手游开发的效率大大提高呢,省点时间还能撸两把,4步你就能搞定
可以考虑一下蜂巢科技的SYSDK,手游支付SDK助力手游开发者提升业务收入。开发几句代码就可以搞定手游支付SDK的集成。这个SDK的特色就是一:支持全网话费支付,无需第三支付工具账号,无需绑定信用卡。手机短信就能实现支付;二玩家无需离开游戏即可支付,让用户玩得更爽,付费方式也更多;三为信誉好的开发商提供预先结算的服务,解决资金周转困难的问题。
sdk的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在游戏中加入支付 SDK : 豌豆荚开发者中心
在游戏中加入支付 SDK
配置游戏服务器端回调地址URL
游戏客户端使用申请好的Appkey_id,secretkey
游戏客户端使用doLogin方法调用豌豆荚登录
登录成功(onSuccess)后,游戏客户端提交用户信息(uid,nick,token)到游戏服务器
游戏服务器提交uid,token到豌豆荚服务器进行验证,验证通过后游戏完成登录
游戏客户端创建订单,设置游戏订单号(order.out_trade_no),发起支付(pay)
玩家完成支付,返回游戏客户端
只有支付成功的订单,豌豆荚服务器通知游戏服务器回调地址,包含order.out_trade_no
游戏服务器端验证回调信息中的签名,使用RsaTest项目中的公钥既可,验证通过后发放游戏道给游戏客户端并返回success字符串,处理失败返回fail字符串
游戏客户端开始使用道具
复制 wdjpayplugin.jar到游戏项目中的libs目录,复制 assets_wdj347.apk 到 assets 目录中,按照Demo提供的方法调用接口既可。
以下是集成 SDK 时您特别需要注意的问题:
集成 SDK 中有任何问题,请工程师加入豌豆荚 SDK 技术支持群
包名的命名原则为:公版渠道包名 + 后缀「.wdj」,如 com.yourgame.wdj
支付后发货后回调的流程为:「用户支付成功」-「CP 服务器接收豌豆荚服务器回调」-「发送成功,返回success,不成功回fail,等待下次回调」,严格禁止未发货即响应回调的行为,这也会直接导致后续的财务结算异常
每个 Appkey 仅能用于一个游戏。如果有多个游戏需要嵌入 SDK,请分别为每个游戏申请单独的 Appkey 及 ID,否则会导致登陆及支付失败。
项目请设置AndroidManifest.xml 使用 android:minSdkVersion=+ android:targetSdkVersion=+编译,能够在Android2.3上运行。
请仔细确认部分的所需文件。
请确保调用SDK方法和处理回调方法在主线程中进行,。
SDK 初始化
在 onCreate 方法里调用 PayConfig.init(this, appkey_id, secretkey) (其中 appkey_id 为您申请的支付 ID, secretkey 为安全密钥),完成支付 SDK 的初始化。
[注] 此步骤必须在启动游戏的时候调用,否则后面任何请求都会出现异常。
豌豆荚账户接口
接口用法细节请参考 PayDemo 例子代码
账户接口定义:
public interface WandouAccount {
// 默认登录接口
public void doLogin(Activity act, LoginCallBack callback);
// 注销登录,callback 参数已经废弃,不会有回调,请传入 null
public void doLogout(Context appContext, LoginCallBack callback);
// 切换账户
public void reLogin(Context appContext, LoginCallBack callback);
调用方需要实现 LoginCallBack 接口,当登录/注册成功时调用该回调方法:
public interface LoginCallBack {
// type==3 正常登录;type==4 新注册
public void onSuccess(User user, int type);
public void onError(int returnCode, String info);
举例:登录
account.doLogin(PayUnity.this, new LoginCallBack() {
public void onSuccess(User arg0, int arg1) {
//登录成功
public void onError(int arg0, String arg1) {
// 请不要在这里再次触发doLogin登录,会产生错误。
// 如果用户放弃登录,回到游戏界面后,应该通过点击游戏界面中的按钮重新登录。
举例:切换账户
account.reLogin(PayUnity.this, new LoginCallBack() {
public void onSuccess(User arg0, int arg1) {
public void onError(int arg0, String arg1) {
// 请不要在这里再次触发doLogin登录,会产生错误。
// 如果用户放弃登录,回到游戏界面后,应该通过点击游戏界面中的按钮重新登录。
在游戏初始化界面提供 进入游戏 的按钮调用 doLogin 实现触发登录。同时在进入这个界面(onCreate)时也可以主动调用一次doLogin 方法。
登录信息服务器端验证
方法:GET,大小写敏感如果 token 有效,则返回字符串 true ,无效则返回 false
编码:UTF-8
登录账户 uid
user.getUid()
登录账户验证信息
user.getToken()
游戏AppKey_id,数字类型
// 验证接口
String uidCheckUrl = &/api/uid/check&;
// 生成验证连接(GET)方式 需要将参数 url 转码
String url=uidCheckUrl+&?uid=&+user.getUid()+&&token=&+ URLEncoder.encode(user.getToken())+&&appkey_id=&+appkey_
备注:请使用 GET 方式访问接口,token有效期在15分钟以内。
如果验证时返回false,请务必提供原始token内容和uid给我们协助调查。
初始化订单
WandouOrder order =new WandouOrder(String subject, String desc, Long money);
传入开发者订单号
order.setOut_trade_no(“订单号”);
其中订单号由开发者自己定义,长度为 50 个字符,
必须填写,如「梦想海贼王」,也就是所谓 order name
必须填写,不超过7个汉字长度,如「1000元宝」
单位是“分”
out_trade_no
开发者的订单号
初始化支付实例
WandouPay wandoupay=new WandouPayImpl();
wandoupay.pay(Activity act,WandouOrderorder,PayCallBack call);
wandoupay.pay(PayUnity.this, order, new PayCallBack() {
public void onSuccess(User arg0, WandouOrder arg1) {
// 成功逻辑
public void onError(User arg0, WandouOrder arg1) {
// 失败逻辑
推荐直接使用支付宝方式测试,最低支持1分钱。不提供测试环境、测试账户。
服务器回调
在订单支付成功后会立即以 POST 方式回调开发者提供的回调 URL
签名使用 RSA 验证 ,详细代码参见内server目录中的文件,我们已经提供服务器端 Java,PHP,C#,C++ 进行RSA验证的例子,请参考完成。
公钥使用上述例子的即可,安全性请参考RSA数字签名原理
订单支付失败不会回调
订单处理成功,返回字符串success, 以PHP为例 echo "success"; 即可。失败返回fail字符串。
POST回调参数
以PHP为例,($_POST['content'])
签名类型(RSA)
值固定 RSA
其中 Content 参数,内容以JSON形式给出。
豌豆荚订单id
单位是(分)
chargeType
ALIPAY:支付宝
SHENZHOUPAY:充值卡
BALANCEPAY:余额
CREDITCARD : 信用卡
DEBITCARD:借记卡
购买人的账户id
out_trade_no
开发者订单号
创建订单时候传入的订单号原样返回
只有充值卡充值的时候才不为空
游戏服务器在收到回调通知后,应该首先进行签名验证,再进行业务处理。当游戏服务器没有正常返回 success 时,豌豆荚服务器会多次通知游戏服务器,24小时后放弃通知。对于24小时后的订单,可以进入豌豆荚后台发起手动回调。如果是已经处理成功的订单,后续收到的豌豆荚通知,也应该返回 success。
服务器回调联调
如果支付订单后没有收到豌豆荚服务器回调通知,首先请检查:
配置的URL是否正确,可在里编辑,会立刻生效
检查客户端appkey是否正确
查看游戏服务器的access log。
在里查询订单详情中的回调时间
确认以上没有问题后,可以在里查询失败订单发起手动回调。
进入,点击 联运游戏,之后可以批量查询订单详情。
提示 Make sure you call PayConfig.init() in onCreate(Activity) correctly.
原因:因为没有在 Activity 的 onCreate 方法中初始化支付 SDK。请在 onCreate 方法里调用 PayConfig.init(this,appkey_id),完成支付SDK的初始化。
提示:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare
原因:没有在ui主线程调用接口,可以使用Activity.runOnUiThread方法调用。
问题:希望豌豆荚服务器IP列表
解答: 60.28.207.131-60.28.207.158
125.39.223.131-125.39.223.158
问题:横竖屏幕设置
解答:如果游戏是横屏的,豌豆荚收银台会自动为横屏。如果游戏是竖屏,则收银台是竖屏。只有游戏能够自动横竖屏变化,收银台才可以随着变化。
问题:透传字段,自定义字段?
解答:直接用使用out_trade_no 字段,最多50个字符,可空可重复。如果数据放不下,请在自己服务器存储信息。
问题:已经返回success,还有豌豆荚回调通知?
解答:必须在2s内返回,超时后,豌豆荚会不断通知,24小时后放弃。
问题:登录验证的作用?
解答:验证玩家身份,确保玩家道具等数据安全。
问题:createRole在哪里调用?一定要调用吗?
解答:玩家登陆后创建角色是调用。可选调用,不要求。
问题:编译后assets中的apk会被自动删除?
解答:如果遇到这个问题,请在编译脚本(bat或sh)或build.xml(参考android ant手册)中增加复制apk到assets目录的命令。
问题:没有单独的RSA秘钥?
解答:没有单独的。全部游戏使用均使用zip包中例子的一个RSA公钥。我们已经提供服务器端 Java,PHP,C#,C++ 进行RSA验证的例子,请参考完成。
问题:部分玩家反馈登录不了?
解答:如果只是少数玩家一直反馈登录不了,其他玩家却可以。可以先确定一下玩家登录时是否正确收到token,如果没有则建议玩家切换不同的网络再尝试。经我们调查在部分地区网络DNS解析存在问题。
问题:测试反馈游戏order name 不正确?
解答:请参考 ,传入正确的subject 和desc 参数。
游戏自己维护升级,在后台上传新版后,可以找到下载链接。
目前已经确认支持 Adobe Air 、Unity3D 、Cocos2d-x 等游戏引擎。
需要打包的资源库如下:
wdjpayplugin.jar 豌豆荚支付 jar 包到 libs 目录(不可缺)
assets_wdj*.apk 到游戏 assets 目录(不可缺),* 号为版本数值
请确保在 Android UI 主线程中调用 SDK 的接口, 必要时可以使用Activity.runOnUiThread方法。
AndroidManifest.xml 声明部分
-keep class **.R
-keep class **.R$* {*;}
-keep class com.alipay.android.app.** {*;}
-keep class com.wandoujia.** { *;}
-keep monsware.cwac.parcel.** { *;}
-keepattributes InnerClasses
Adobe Air 接入官方文档
Android主线程调用方法例子
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
// 这样确保是在主线程调用,也可以处理UI更新
//((TextView) findViewById(id)).setText(str);
如果您需要更多帮助,请在此提交,我们将在 1 个工作日内回复。
获得帮助或提供反馈
邮件支持:
企业 QQ:400 652 87057963人阅读
游戏开发(22)
小黑终于有了自己的家:,欢迎来坐坐。
题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道。每个渠道SDK接入的方法呢,多是大同小异。但是,正是这些小异,又让SDK的接入,产生了无穷无尽的变数。所以,接入SDK之前,如果你没有经验,或者没有被SDK坑过,那么当你看到这系列文章的时候,你很幸运,你可以避免这一切了。如果你之前被坑过,而且还在继续被坑着,那么现在,就是你解脱的时刻。
文章我们说了整个U8 SDK抽象成的设计,那这篇文章,我们就来验证一下,他是否如我们期待的那样,简单灵活。
正如之前所说,对于每个游戏,只需要接入抽象层,而每个渠道SDK的接入,就是该抽象层的一个实现而已。最后通过一键打包工具来完成最后的产出。那么,我们先来看看,游戏怎么来调用这个抽象层。
我们假设我们已经开发了一款游戏,面临上线,需要接入SDK,需要接入UC,当乐,91,360,小米等渠道。因为采用U8 SDK统一接入框架的思想,游戏工程本身不耦合具体的每个渠道SDK,而只是调用U8 SDK抽象层。那么,根据文章谈到的抽象层,我们就来看看如何调用。
首先,我们用eclipse新建一个android工程,作为我们这个模拟的游戏工程。这里需要说一下,如果你不是直接使用Android开发的游戏,而是采用像Unity3D,Cocos2D等游戏引擎,其接入也是一样的。只是多了一层JNI调用。我们新建一个主运行的Activity:
package com.u8.sdk.
import com.u8.sdk.IU8SDKL
import com.u8.sdk.LoginR
import com.u8.sdk.PayP
import com.u8.sdk.U8SDK;
import com.ponents.U8P
import com.ponents.U8U
import android.os.B
import android.view.V
import android.widget.B
import android.widget.T
import android.annotation.SuppressL
import android.app.A
import android.content.I
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
@SuppressLint(&ShowToast&)
public void onResult(int arg0, String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
@SuppressLint(&ShowToast&)
public void onLoginResult(LoginResult loginResult) {
Toast.makeText(MainActivity.this, &登录成功,sid:&+loginResult.getSid(), Toast.LENGTH_SHORT);
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Button btnLogin = (Button)findViewById(R.id.button2);
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
U8SDK.getInstance().init(MainActivity.this);
private void login(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
public void run() {
U8User.getInstance().login();
private void pay(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
public void run() {
PayParams params = new PayParams();
params.setPrice(100);
params.setServerId(&1&);
params.setRoleId(&1&);
U8Pay.getInstance().pay(params);
public void onActivityResult(int requestCode, int resultCode, Intent data){
U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
public void onPause(){
U8SDK.getInstance().onPause();
super.onPause();
public void onResume(){
U8SDK.getInstance().onResume();
super.onResume();
public void onNewIntent(Intent newIntent){
U8SDK.getInstance().onNewIntent(newIntent);
super.onNewIntent(newIntent);
public void onStop(){
U8SDK.getInstance().onStop();
super.onStop();
public void onDestroy(){
U8SDK.getInstance().onDestroy();
super.onDestroy();
public void onRestart(){
U8SDK.getInstance().onRestart();
super.onRestart();
public void onBackPressed(){
U8SDK.getInstance().onBackPressed();
super.onBackPressed();
大家可以看到,在我们这个模拟的游戏中,接入SDK抽象层是一件多么Easy的事情,就是在onCreate里面进行初始化操作:
U8SDK.getInstance().init(MainActivity.this);
同时,如我们之前所说,我们是基于监听器模式的设计,我们需要设置一个监听,当具体SDK有状态变更,成功或者失败时,我们可以得到具体的信息:
U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
@SuppressLint(&ShowToast&)
public void onResult(int arg0, String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
@SuppressLint(&ShowToast&)
public void onLoginResult(LoginResult loginResult) {
Toast.makeText(MainActivity.this, &登录成功,sid:&+loginResult.getSid(), Toast.LENGTH_SHORT);
其中,onResult在调试的时候,可以做一个Toast输出。onLoginResult则是渠道SDK登陆成功时的回调。在这里就是需要去做我们之前整个登陆流程里的第四步(u8appid,sid)访问U8 Server获取一个接下来登陆认证使用的一个token。
这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:
U8User.getInstance().login();
在需要调用支付界面的地方调用:
U8Pay.getInstance().pay(params);
需要注意的是,这些接口需要在UI 线程中调用,所以,我们需要使用U8SDK.getInstance().runOnMainThread():
U8SDK.getInstance().runOnMainThread(new Runnable() {
public void run() {
U8User.getInstance().login();
最后,我们需要重写Activity相关的系统事件方法,在对应的方法里面,加上U8 SDK对应方法的调用。比如:
public void onPause(){
U8SDK.getInstance().onPause();
super.onPause();
这样,对于我们这个“游戏”来说,就算完成了SDK的接入了。大家可以看到,对于游戏来说,接入是一件很简便的事。它不用考虑后面怎么打包,怎么生成渠道包,怎么管理配置,怎么升级,。。。对于TA,到这里就结束了。接下来,我们就要看看,对于一个渠道来说,比如UC,我们怎么来接入到这套框架中来呢?
本文作者:小黑
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:710938次
积分:7998
积分:7998
排名:第1524名
原创:95篇
转载:22篇
评论:473条
难度:中级
类型:技术教程你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
将按钮的boxcollider
enable=false后
,再给按钮添加上boxcollider按钮就变灰了
,鼠标划过后颜色才会变过来
怎么不让他变灰呢?
没明白什么意思...{:86:}
没明白什么意思...额,将按钮的boxcollider 用代码设置enabled=false,然后
在某些情况下又把boxcollider设置成enabled=true了
,那现在问题来了……
为什么按钮的图片会变灰的,怎么设置不让他变灰?能明白不?你可以试一下的
因为你UIButton的disable设置的是灰色
最简单的就是把这个颜色设置的跟normal一样就行了~
因为你UIButton的disable设置的是灰色
最简单的就是把这个颜色设置的跟normal一样就行了~ ...button背景是图片啊 , 怎么设置灰色
我知道 你说的吧button
设置颜色,我试了 不好使
button背景是图片啊 , 怎么设置灰色
我知道 你说的吧button
设置颜色,我试了 不好使 ...吧你的button的那个组件的inspector截个图看看~
不明白这个跟boxcollider有什么关系。。。。
不明白这个跟boxcollider有什么关系。。。。
不明白这个跟boxcollider有什么关系。。。。已经知道原因了
,在点击的时候系统自动给按钮背景添加
tween color
脚本,设置这个脚本的
的颜色 就ok了
要变灰要修改ngui的shader
要回复问题请先或
关注: 0 人unity游戏接广点通安卓SDK后从任务管理器进入出现黑屏,有大神能帮忙下吗?
用unity接广点通的安卓SDK,出现了这样一个问题:在真机上按HOME键返回桌面后,再点击ICON能进入游戏,没有任何异常。但是按HOME键返回桌面后从任务管理器(类似于IOS双击HOME出现的那个界面)进入就会黑屏,有时出现一个安卓默认activity的白色界面。从当前应用切换到其他应用后返回也是如此 。把这个SDK相关资源卸载后打包再试没有任何问题,在脚本中不调用这个SDK相关函数但保留SDK相关资源在包内也会出现这个问题,纠结好久了,有大神帮忙吗,财富只有这点了,十分感谢
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 unity接入支付sdk 的文章

 

随机推荐