android微信支付接入之前要cocos2dx接入微信登录录吗

微信支付API:
支付宝API:
以下分篇介绍微信支付和支付宝支付,其中服务端负责生成订单及签名,及接受支付异步通知。客户端负责使用服务端传来的订单信息调用支付接口,及根据SDK同步返回的支付结果展示结果页。
微信支付api接入:
使用前准备
SDK及Demo下载&&&&
Jar包的使用(3.1.1版本)&&&&
在项目中按照如上方法使用微信支付jar包
libammsdk.jar 微信支付主jar包
注册微信开放平台并认证开发者资质,认证成功后点击创建应用,填写相关资料
其中 中文的应用名称和应用简介必须填写,app图标必须准备28*28、108*108尺寸的
(用于下载获取应用签名工具)
将输入框中输入应用包名,点击按钮获取应用签名,将绿色字符串填写至 图5 中的签名处
应用包名可以在声明文件中获取,
填写完成后提交审验,审核完成后在管理中心找到刚刚申请的应用
点击查看就可以看到appid了
申请接入微信支付
在开放平台的管理中心找到所需接入支付能力的app,点击查看
点击微信支付一栏的申请开通,跳转至申请界面。
在申请接入支付的时候,请准备好app demo,以及含图文的文档说明,对公账户,参考下面的地址填写表格信息。
等待七个工作日左右,微信支付审批通过后会给你的预留邮箱发送微信商户号和密码。(此账号同时也需提供给服务器开发人员)
如图所示的就申请成功了
页面底部有如下信息需确保与app信息符合,否则后续无法操作成功。
如有出入,点击修改更改至和app信息一致即可,在打包正式签名版本的时候需要更改,签名会变化。
AndroidManifest配置
权限配置:
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.MODIFY_AUDIO_SETTINGS&/&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
广播配置:
&receiver android:name=&.wxapi.AppRegister&&
&intent-filter&
&action android:name=&com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP& /&
&/intent-filter&
&/receiver&
Activity配置:
此activity路径名称必须一致,不然无法收到微信的返回码
android:name=&.wxapi.WXPayEntryActivity&
android:exported=&true&
android:launchMode=&singleTop&
android:theme=&@style/AppTheme& /&
此外,在需要使用微信支付的Activity中需加入如下配置(如不配置可能造成返回码一直为 -1 )
&intent-filter&
&action android:name=&android.intent.action.VIEW& /&
&category android:name=&android.intent.category.DEFAULT& /&
&data android:scheme=appid /&
&/intent-filter&
混淆配置:
-keep class com.tencent.mm.sdk.** {
微信支付使用
微信支付拉起
操作类封装:
public class WeChatPay {
private String partnerId;
private String prepayId;
private String nonceS
private String timeS
private String packageV
private MaterialDialog materialD
* 构造函数
public WeChatPay(Activity activity, GetDepositResponse.OrderBean orderBean, MaterialDialog materialDialog) {
this.activity =
this.appid = orderBean.getAppid();
this.partnerId = orderBean.getPartnerid();
this.prepayId = orderBean.getPrepayid();
this.nonceStr = orderBean.getNoncestr();
this.timeStamp = orderBean.getTimestamp();
this.packageValue = orderBean.getPackage();
this.sign = orderBean.getSign();
this.materialDialog = materialD
// 支付调用的代码
public void pay() {
IWXAPI mWxApi = WXAPIFactory.createWXAPI(activity, appid, true);
boolean sIsWXAppInstalledAndSupported = mWxApi.isWXAppInstalled() && mWxApi.isWXAppSupportAPI();
if (!sIsWXAppInstalledAndSupported) {
materialDialog.dismiss();
materialDialog = new MaterialDialog.Builder(activity)
.content(&系统检测设备尚未安装微信客户端&)
.title(&提示&)
.positiveText(&下载微信&)
.onPositive(new MaterialDialog.SingleButtonCallback() {
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
Uri uri = Uri.parse(&/cgi-bin/readtemplate?uin=&stype=&promote=&fr=&lang=zh_CN&ADTAG=&check=false&t=weixin_download_method&sys=android&loc=weixin,android,web,0&);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
activity.startActivity(intent);
.negativeText(&更换支付方式&)
materialDialog.show();
mWxApi.registerApp(appid);
if (mWxApi != null) {
PayReq req = new PayReq();
req.appId =
req.partnerId = partnerId;
req.prepayId = prepayId;
req.nonceStr = nonceS
req.timeStamp = timeS
req.packageValue = packageV
req.sign =
} catch (Exception e) {
e.printStackTrace();
mWxApi.sendReq(req);
Log.d(&WeChatPay&, &发起微信支付申请&);
使用说明:
将微信支付所需用的数据都封装到WeChatPay这个操作类里,其中activity是用来创建微信支付时所必须的,orderbean是微信支付所需要的参数的bean类,materialdialog是用来弹出检测是否安装微信客户端的提示。
调用支付的api前,首先得向微信注册本app,代码如下:
IWXAPI mWxApi = WXAPIFactory.createWXAPI(activity, appid, true);
mWxApi.registerApp(appid);
服务器生成支付订单,先调用统一下单API生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
if (mWxApi != null) {
PayReq req = new PayReq();
req.appId =
req.partnerId = partnerId;
req.prepayId = prepayId;
req.nonceStr = nonceS
req.timeStamp = timeS
req.packageValue = packageV
req.sign =
} catch (Exception e) {
e.printStackTrace();
mWxApi.sendReq(req);
Log.d(&WeChatPay&, &发起微信支付申请&);
订单信息的字段说明可以参照下表:
这些字段都是app服务器端拉取的,app端无需关心具体的生成操作。
支付错误码处理
错误码接收Activity:
public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {
private static final String TAG = &WXPayEntryActivity&;
private IWXAPI mW
private String appid = &appid&;
private static WXpaycallback wXpaycallback;
//微信支付结果码
private static final int PAY_OK = 0;//交易成功
private static final int PAY_ERR = -1;//交易失败
private static final int PAY_CANCLE = -2;//交易取消
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String str = AppConfigUtils.getInstanse(this).getAppid();
if (!str.isEmpty() && !appid.equals(str)) {
mWxapi = WXAPIFactory.createWXAPI(this, appid);
mWxapi.handleIntent(getIntent(), this);
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mWxapi.handleIntent(intent, this);
public void onReq(BaseReq req) {
public void onResp(BaseResp resp) {
Log.d(TAG, &onPayFinish, errCode = & + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if(resp.errCode == PAY_OK){
this.finish();
wXpaycallback.dialogdoOK();
}else if (resp.errCode == PAY_ERR){
this.finish();
wXpaycallback.dialogdoERR();
}else if(resp.errCode == PAY_CANCLE){
this.finish();
wXpaycallback.dialogdoCANCLE();
//回调接口
public interface WXpaycallback {
public void dialogdoOK();
public void dialogdoERR();
public void dialogdoCANCLE();
public void setWXpaycallback(WXpaycallback wXpaycallback) {
this.wXpaycallback = wX
使用说明:
特别需要注意的就是,微信支付的返回码只能用微信指定的wxapi包下面的WXPayEntryActivity来接收(包名或类名不一致会造成无法回调)。
错误码的回调操作全在onResp()方法中,由于微信支付的返回码只可在指定页面接收,这个页面又无法成为我们的App界面,所以此处代码我做了回调操作,以便app界面处理UI动作。
可以看到我的代码中,在处理错误码的时候,做操作回调之前都会finish()这个activity,这是因为在支付时,WXPayEntryActivity会以透明的形式启动,所以你可能需要在支付完成得到支付响应码后手动finish该activity,不然你自己写的支付页面的activity需要返回两次才能退出,因为第一次按下back键实际是finish掉WXPayEntryActivity,第二次才是你自己的activity。
如果没有什么特殊操作了,错误码的接受页面就这样写不要动了。另外在支付时,微信尚未登录,得不到任何回调,如果调起支付时有弹窗进度框,并且你想在得到响应码后让它消失是行不通的,需要在跳出的onStop中处理进度条,不然未登录并且用户取消了支付时进度条无法消失。
Errcode参数表:
外部支付调用
调用代码:
WeChatPay weChatPay = new WeChatPay(DepositActivity.this, depositResponse.getData(), materialDialog);
WXPayEntryActivity wxPayEntryActivity = new WXPayEntryActivity();
wxPayEntryActivity.setWXpaycallback(new WXPayEntryActivity.WXpaycallback() {
public void dialogdoOK() {
new Timer().schedule(new TimerTask() {
public void run() {
httpOrderResultRequest(accessToken, orderinfoId);
public void dialogdoERR() {
materialDialog.dismiss();
ToastUtils.showToast(DepositActivity.this, &支付失败&);
public void dialogdoCANCLE() {
materialDialog.dismiss();
ToastUtils.showToast(DepositActivity.this, &支付取消&);
weChatPay.pay();
使用说明:
首先用WeChatPay实例化一个对象,传入当前的activity,从服务器得到的订单参数的实体对象,dialog实例对象,完成这些步骤后就可以通过pay()方法拉取微信支付了,当然,我们还得通过刚刚在WXPayEntryActivity里设置的回调方法来实现我们自己app界面在完成支付或者取消或者失败时候的操作。dialogdoOK()是用来处理支付成功的,dialogdoERR()是用来处理支付发生错误或者失败的情况的,dialogdoCANCLE()是用来处理支付取消的情况的。
支付宝支付api接入:
使用前准备
SDK及Demo下载
Jar包的使用(版本)&&&&
在项目中按照如上方法使用支付宝支付jar包
alipaySdk-.jar 支付宝支付主jar包
商户签约审核&&&&
首先得注册商户账号,打开以下商户网页点击注册,注册认证完商户号之后才可以进行后续操作。
里进行产品签约;
商户登录 ,可在&签约订单&中查看审核进度。
PID和秘钥管理(拉通demo所需步骤)
支付宝提供商户接口产品时,会自主提供一个保障商户接入安全的一组信息及其对应的配置平台,这组信息就是密钥。由商户密钥与支付宝密钥交换后与支付宝商户标识(如partnerID、APPID等)绑定。
在&合作伙伴密钥管理&下(根据不同的产品选择对应的入口),点击&RSA加密&后的&添加密钥&,把自己的公钥复制进去。
点击&确认上传&,提示:上传成功,说明已经成功上传
说明:&如果需要修改公钥,只需要把新的公钥复制进去,点击&修改&即可!
生成RSA私钥的工具可以在此下载。
上述的所有的参数配置完成了需要交给app服务器端开发人员,用以生成支付宝订单信息。
AndroidManifest配置
权限配置:
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
Activity配置:
android:name=&com.alipay.sdk.app.H5PayActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind& &
&/activity&
android:name=&com.alipay.sdk.auth.AuthActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind& &
&/activity&
混淆配置:
-libraryjars libs/alipaySDK-.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
支付宝支付使用
支付宝支付拉起
操作类封装:
public class AliPay {
/*支付宝支付结果码*/
private static final String PAY_OK = &9000&;// 支付成功
private static final String PAY_WAIT_CONFIRM = &8000&;// 交易待确认
private static final String PAY_NET_ERR = &6002&;// 网络出错
private static final String PAY_CANCLE = &6001&;// 交易取消
private static final String PAY_FAILED = &4000&;// 交易失败
private SoftReference&Activity& activitySoftR
private static final int SDK_PAY_FLAG = 1;
private String orderI
public AliPay(Activity activity, String orderInfo) {
activitySoftReference = new SoftReference&Activity&(activity);
this.activity = activitySoftReference.get();
this.orderInfo = orderI
@SuppressLint(&HandlerLeak&)
private Handler mHandler = new Handler() {
@SuppressWarnings(&unused&)
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
AliPayResult payResult = new AliPayResult((String) msg.obj);
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
if (alipaycallback != null) {
if (resultStatus.equals(PAY_OK)) {
alipaycallback.dialogOK();
} else if (resultStatus.equals(PAY_CANCLE)) {
alipaycallback.dialogCANCLE();
} else if (resultStatus.equals(PAY_NET_ERR)) {
alipaycallback.dialogERR();
} else if (resultStatus.equals(PAY_WAIT_CONFIRM)) {
ToastUtils.showToast(activity, &支付结果确认中&);
} else if (resultStatus.equals(PAY_FAILED)) {
alipaycallback.dialogERR();
alipaycallback.dialogERR();
* call alipay sdk pay. 调用SDK支付
public void pay() {
if (!ValidatorUtils.isEmpty(orderInfo)) {
final String payInfo = orderI
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(activity);
// 调用支付接口,获取支付结果
String result = alipay.pay(payInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
ToastUtils.showToast(activity, &支付信息有误&);
//回调接口
public interface Alipaycallback {
public void dialogOK();
public void dialogERR();
public void dialogCANCLE();
public void setAlipaycallback(Alipaycallback alipaycallback) {
this.alipaycallback =
使用说明:
将支付宝支付所需用的数据都封装到AliPay这个操作类里,其中activity是用来创建支付宝支付时所必须的,orderInfo是支付宝支付所需要的参数的订单信息。支付宝拉起的时候,会进行检测(sdk功能),如果本机安装了支付宝客户端则会拉起客户端,如果本机尚未安装客户端,则直接拉起支付宝h5界面进行支付。
服务器生成支付订单,通过加密算法生成订单信息后传输给APP发起支付。以下是调起支付宝支付的关键代码:
new Thread() {
public void run() {
super.run();
PayTask payTask = new PayTask(mActivity);
String result = payTask.pay(signInfo, true);
Message message = mHandler.obtainMessage();
message.what = PAY_RESULT;
message.obj =
mHandler.sendMessage(message);
}.start();
订单详情的参考字段说明:(app端无须设置,知道字段含义即可)
所有的生成订单的步骤全部放在服务器端,app端只需将金额发送给服务器,服务器生成相应的订单后再返回给app拉起支付宝支付。
支付错误码处理
错误码接收类:
public class AliPayResult {
private String resultS
public AliPayResult(String rawResult) {
if (TextUtils.isEmpty(rawResult))
String[] resultParams = rawResult.split(&;&);
for (String resultParam : resultParams) {
if (resultParam.startsWith(&resultStatus&)) {
resultStatus = gatValue(resultParam, &resultStatus&);
if (resultParam.startsWith(&result&)) {
result = gatValue(resultParam, &result&);
if (resultParam.startsWith(&memo&)) {
memo = gatValue(resultParam, &memo&);
public String toString() {
return &resultStatus={& + resultStatus + &};memo={& + memo
+ &};result={& + result + &}&;
private String gatValue(String content, String key) {
String prefix = key + &={&;
return content.substring(content.indexOf(prefix) + prefix.length(),
content.lastIndexOf(&}&));
* @return the resultStatus
public String getResultStatus() {
return resultS
* @return the memo
public String getMemo() {
* @return the result
public String getResult() {
使用说明:
AliPayResult这个类主要是用来获取支付宝客户端返回的错误码的,此类为官方demo里编写的处理类,我们直接调用加以获取错误码,默认认为他是sdk里封装好的类,了解其功能即可。
支付订单的处理结果,app端可以通过消息机制获取到,具体的可以通过以下代码获取
AliPayResult payResult = new AliPayResult((String) msg.obj);
String resultStatus = payResult.getResultStatus();
客户端的返回码说明可以参照下图:
外部支付调用
调用代码:
AliPay aliPay = new AliPay(DepositActivity.this, depositResponse.getData().getOrderInfo().toString());
aliPay.setAlipaycallback(new AliPay.Alipaycallback() {
public void dialogOK() {
new Timer().schedule(new TimerTask() {
public void run() {
httpOrderResultRequest(accessToken, orderinfoId);
public void dialogERR() {
materialDialog.dismiss();
ToastUtils.showToast(DepositActivity.this, &充值失败&);
public void dialogCANCLE() {
materialDialog.dismiss();
ToastUtils.showToast(DepositActivity.this, &充值取消&);
aliPay.pay();
使用说明:
首先用AliPay实例化一个对象,传入当前的activity,从服务器得到的订单信息,完成这些步骤后就可以通过pay()方法拉取支付宝支付了,当然,我们还得通过刚刚在AliPay里设置的回调方法来实现我们自己app界面在完成支付或者取消或者失败时候的操作。dialogdoOK()是用来处理支付成功的,dialogdoERR()是用来处理支付发生错误或者失败的情况的,dialogdoCANCLE()是用来处理支付取消的情况的。
支付总结:
在开发app端的支付接入的时候, app需要和服务器端协同开发这个支付接入,app的所需数据都得先在demo中跑通确保数据是可使用的,然后再交送给服务器端的开发人员,否则后期拉不起支付的时候很难定位问题所在。
本次开发中同时接入了微信支付和支付宝支付,所以我在开发过程中就对两者的接入过程有了一个比较。值得一提的是支付宝的支付,他的SDK封装的很好,包括检测本地是否有支付宝客户端以确定用什么方式拉起支付宝支付,开发人员无需自己检测。同时,支付宝的产品签约过程比微信支付的申请快多了,虽然官网上两家公司标注的都是七个工作日内完成审核,但是支付宝基本上隔天就审核完成,而微信不到第七个工作日都不会给你审核。还有微信支付申请的过程中所需提供的资料非常多,这还单单只是申请的指定应用的支付接入功能,如果说你的开发者账号下还有一个app需要接入微信支付,那么恭喜你,这边的申请流程还得再来一遍。相比之下,支付宝支付的申请就好了不知道多少了,它的支付能力的申请都是和商户号绑定的,无论创建多少应用你都只需申请一次支付能力,非常的人性化。
支付宝接入的时候,基本没有坑,app端只要代码写对就能拉通,当然了商户平台里参数需要配置正确,这些配置最好还是服务器端开发人员来做,不然有了订单还是拉不起支付的。
接下来我要细说一下微信支付开发过程中的坑了,首先,app的微信支付的错误码返回还得必须用它自己的那套activity来接收,包名或者类名不对,就获取不到错误码了。在开发过程中,你可能遇到的最多的问题就是errcode为-1的问题。相信你只要按照我上述的步骤进行配置,这应该不算问题。官方的开发文档里写的非常简洁,好多坑都是文档中没写出相应的配置所导致的,所以参考意义还不如某些博客上的教程。另外微信服务器端一旦订单信息拉取失败后需要重置秘钥时,这个时候本地拉起的时候就会一直报-1的错误码,通常遇到这种情况,你可以等上半个小时左右,虽然更改在服务器端生效了,但是本机微信这边还没生效,得有一段响应时间,过了这段时间后,app就可以成功拉起微信支付了。最后需要强调的一点就是,在我们开发过程中,通常都是svn进行代码管理的,团队成员中某个人要是用一样的代码打出来的包是不能拉起微信支付的,这个时候微信会报errcode为-1的错误,这是因为每个机子打出来的包的签名都是不一样的,这和微信开放平台上申请支付的那个应用的签名对不上号了,微信支付自然就调不起来了。当然在出正式版本的时候都会有一套自定的签名,这样就可以解决不同机子打出来的包不能成功拉起支付的问题了。忠告一点就是,保持开放平台上的参数和本地包的参数一致,不然就是一个个磨人的微信支付坑。
写到这里,差不多完结了,最后预祝各位同仁成功接入支付。
本文已收录于以下专栏:
相关文章推荐
源码地址/helloworld107/ShangGuiGu321Meida.git
与大部分app类型,点击顶部的搜索框后直接跳转到搜索活动再做处...
现在的支付潮流莫过于微信跟支付宝了,最近我们项目涉及到会员需求,就用到微信支付跟支付宝支付,说实话接入之前会觉得这个复杂,等真正去动手实践的时候才觉得狠简单,真的狠简单。从接入到支付一步到位,Run完...
本文介绍,接入微信和支付宝支付,所需要注意的细节。
微信支付的SDK配置,有一个细节需要注意,就是在上传签名这里需要注意。别的第三方SDK,需要上传的都是签名文件的sha1值,而...
快速接入支付宝支付
快速接入微信支付
支付宝支付详细接入流程
微信支付详细接入流程
微信支付宝官方文档地址
微信支付宝demo下载地址
1、准备工作在微信开放平台进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
微信支付的开发方式和支付宝不同,微信支付在客户端不需要太多的操作,大多依赖于服务...
最近的项目中有支付功能,客户要求同时支持“支付宝”和“微信支付”;相对来说支付宝较简单一些,以前也在Android中集成过,因此没有花费过多时间便完成了。但微信支付我是第一次接触,着实费了不少...
1、首先在微信开放平台上有账号,并创建一个应用,填上您的包名、签名(注:签名最好是将app装在手机上、然后通过签名获取工具来获取签名,微信开放平台上面有),通过微信支付审核后即可开始开发。
2、开始...
Android接入微信支付
今天来聊聊,android中接入微信支付的需求,肯定有人会说,这多简单呀,还在这里扯什么,赶快去洗洗睡吧~...
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多。
1、到支付宝官网,下载支付宝集成开发包
由于android设备一般用的都是无线支付,所以我们申...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Android微信支付
我的图书馆
Android微信支付
一、使用微信官方的提供的demo里的appid等1.微信接口上手指南:(从“移动应用开发”-&“Android接入指南”)建议,先把官方这篇文章看完2.微信支付接口(从“移动应用开发”-&“Android开发手册” )(下载官方demo&)Android端接口文档SDK for AndroidSample for Android服务端demo退款及对账开发指南、退款及对账demo结合官方给的demo和《微信支付接口 For Android 上手指南》文档,可以看出,微信支付总共分为4个步骤:(1)利用获取APP_ID&和&APP_SECRET&请求获取 access_tokenJava12345678910111213141516171819202122/*
* 步骤一:获取AccessToken
private class GetAccessTokenTask extends AsyncTask&Void, Void, GetAccessTokenResult& {
&&&& @Override
&&&& protected void onPreExecute() {
&&&& @Override
&&&& protected void onPostExecute(GetAccessTokenResult result) {
&&&&&&&&&&&&&&&& /*
&&&&&&&&&&&&&&&& * 根据获得的access token来开启获取支付id的任务
&&&&&&&&&&&&&&&& * 开始步骤二:
&&&&&&&&&&&&&&&& */
&&&&&&&&&&&&&&&&GetPrepayIdTask getPrepayId = new GetPrepayIdTask(result.accessToken);
&&&&&&&&&&&&&&&&getPrepayId.execute();
&&&& @Override
&&&& protected GetAccessTokenResult doInBackground(Void... params) {
&&&&&&&&&&&&//发网络请求获取access token
(2)利用access_token,以及partnerid和APP_KEY生成预支付订单Java123456789101112131415161718192021private class GetPrepayIdTask extends AsyncTask&Void, Void, GetPrepayIdResult& {
&&&& protected void onPreExecute() {
&&&& @Override
&&&& protected void onPostExecute(GetPrepayIdResult result) {
&&&&&&&&&&&&/*
&&&&&&&&&&&& * 获取PrepayId之后 开始步骤三
&&&&&&&&&&&& */
&&&&&&&&&&&&sendPayReq(result);
&&&& @Override
&&&& protected void onCancelled() {
&&&&&&&&&& super.onCancelled();
&&&& @Override
&&&& protected GetPrepayIdResult doInBackground(Void... params) {
&&&&&&&&&&//获取PrepayId的操作
&&&&&&&&&&//这里面涉及到[package 生成方法]和[app_signature 生成方法]等复杂操作参见demo代码及文档
&(3)利用之前的参数以及PARTNER_ID调起微信支付Java12345678910111213141516171819202122private void sendPayReq (GetPrepayIdResult result) {
PayReq req = new PayReq();
req. appId = Constants. APP_ID;
req. partnerId = Constants. PARTNER_ID;
req. prepayId = result. prepayId;
req. nonceStr = nonceStr;
req. timeStamp = String. valueOf(timeStamp);
req. packageValue = "Sign=" + packageValue;
List signParams = new LinkedList();
signParams.add( new BasicNameValuePair( "appid", req. appId));
signParams.add( new BasicNameValuePair( "appkey", APP_KEY));
signParams.add( new BasicNameValuePair( "noncestr", req.nonceStr));
signParams.add( new BasicNameValuePair( "package", req.packageValue));
signParams.add( new BasicNameValuePair( "partnerid", req.partnerId));
signParams.add( new BasicNameValuePair( "prepayid", req.prepayId));
signParams.add( new BasicNameValuePair( "timestamp", req.timeStamp));
req. sign = genSign(signParams);
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
(4)支付完成后微信会回调 WXPayEntryActivity 的public void onResp(BaseResp resp)方法,所以后续操作,放在这个回调函数中操作就可以了。resp.errCode== 0 :表示支付成功resp.errCode== -1 :表示支付失败resp.errCode== -2 :表示取消支付特别注意:1.第一次很多同学调试微信的官方demo会遇到这样的问题解决办法:(1)、解压sdk demo工程压缩包,并导入到workspace,如下图:(2)、选择Eclipse顶部菜单Window-&Preferences,在弹出的对话框中,选择Android目录下的Build,如下图:指定Custom debug keystore选项的路径为sdk demo工程目录中的debug.keystore文件,如下图:并应用该配置。(3)、运行该sdk_sample工程。& &二、当你使用自己申请的appid等参数。当你在微信开发平台(open.)申请一个普通应用时,你会得到:public static final String&APP_ID&= “wxd930ea5d5a258f4f”;private static final String&APP_SECRET&= “db426aa0dcac7b″;当你的应用涉及到微信支付功能是,你需要申请微信支付,申请会有些合同啊什么的,审核通过你会收到邮件,邮件中会有private static final String&APP_KEY(PaySignKey)&= “L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K”; // wxd930ea5d5a258f4f 对应的支付密钥除此之外,还有个微信支付商户申请,申请通过后邮件中会回复:public static final String&PARTNER_ID&= “″;private static final String&PARTNER_KEY&= “53e9cf7b0519d”;然后为了支付的安全起见,最好把支付的前两个步骤放在服务器端完成,客户端请求服务器拿到前两个步骤生成的一些参数,然后在客户端做第三步,调起微信支付。特别注意:1.可以弹出微信支付的界面,但是支付之后没有进入回调的Activity:WXPayEntryActivity ?微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXPayEntryActivity.java其他的接口回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXEntryActivity.java而且这两个回调的Activity必须要实现IWXAPIEventHandler的接口 。2.签名问题,总是弹不出微信支付界面,然后就回调-1 ?这个问题多半是签名错误,或者keystore,包名,签名不一致导致。(1)在申请微信开放平台的时候需要填写 应用包名和应用签名(这个签名可以用 apk生成),所以这就需要你用正式的 keystore打包应用测试开放平台的接口。(2)再有错误,就是你第二步生成Prepayid时的app_signature 生成错误,仔细看下demo和文档。3.注意配置文件中AndroidManifest.xmldemo里中有这写配置,似乎对微信支付的调起及回调都有影响,还是按照demo里的,加上这部分配置XHTML123456789101112131415161718&activity
&&&&android:name= ".wxapi.WXEntryActivity"
&&&&android:label= "@string/app_name"
&&&&android:exported= "true"
&&&&android:launchMode= "singleTop"&
&&&&......
&&&&&intent-filter &
&&&&&&&&&action android:name ="android.intent.action.VIEW"/&
&&&&&&&&&category android:name= "android.intent.category.DEFAULT" /&
&&&&&&&&&data android:scheme ="wxd930ea5d5a258f4f"/&&!--&&注意这里,似乎对程序有影响,要加上--&
&&&&&/intent-filter &
&/activity &
&&&&android:name= ".AppRegister"&
&&&&&intent-filter &
&&&&&&&&&action android:name= "com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" /&
&&&&&/intent-filter &
&/receiver &
三、微信其他接口-分享接口用过微信支付接口之后,其他的微信接口就简单多了。微信的分享 分为分享到朋友圈和分享给好友(即发送消息)两种。(1)直接调用SDKJava123456789101112131415161718//WXTextObject对象
WXTextObject textObj = new WXTextObject();
textObj. text = text;
//WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg. mediaObject = textObj;
msg. description = text;
//SendMessageToWX.Req对象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req. transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
req. message = msg;
req. scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession ;
req. openId = getOpenId();
// 调用api 接口发送数据到微信
api.sendReq(req);
然后调起 分享的对话框之后就是 微信做的操作,分享完成后一样会回到回调的入口,你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXEntryActivity.java你可以在onResp中做分享完成的后续操作。(2)还有一种就是不使用SDK方式分享,参见:Java123456789101112131415/**
* 分享信息到朋友
* @param file,假如图片的路径为path,那么file = new File(path);
private void shareToFriend(File file) {
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(componentName);
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_TEXT, "测试微信");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(intent);
Java123456789101112131415 /**
* 分享信息到朋友圈
* @param file,假如图片的路径为path,那么file = new File(path);
private void shareToTimeLine(File file) {
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setComponent(componentName);
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(intent);
这种方式的缺点就是你得不到回调,不知道分享是否成功,但却是一种简单的方式。如果还有其他什么问题:参见另一篇文章
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 unity接入微信登录sdk 的文章

 

随机推荐