由于最近工作中的项目需要用到微信支付,这才紧张慌忙的去学习了一下。
这也是我第一次想正正经经的写一篇文章,第一次在简书中使用Markdown
语法去写,本人是菜鸟所以写的很粗糙 ;
之所以记录这篇文章,一方面是希望如果有人可以看到少走一点坑,一方面
是可以记下来,如果以后还有需要就不用在去上网找了。
去微信开发者网站上 注册 - 登录 - 添加应用
- 坑1 包名不能出错
- 坑2 填写的应用签名 取你打包的key生成的md5 中间的冒号要去掉,
大写字母需要转变为小写。(可以使用签名工具)
一般需要审核好几天,需要花300块大洋申请的微信支付账号 获得应用上的APPid;审核通过后 拿到 APPid.
开始集成到项目中 new 一个常量类 存放你的appid 以及商户号
4. 在你的工程下创建一个包
包名需要一样 ,微信就是这么霸道、、
![C%`RQ6]68OS~ORH_)$MX91V.png](http://upload-images.jianshu.io/upload_images/3999297-d98541ad93b9084c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5. 在开发者文档下他的demo,复制这个sdk 到你的工程中。
6. 写一个供微信回调的接口
7.微信的回调类 activity名字必须一样
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler { private static final String WEIXIN_TAG = dWXPayEntryActivity.class.getSimpleName(); private IWXAPI api; public static WXPayEntryActivity instance; private IWXPayCallback mCallBack; /*** 微信支付成功的回调标识 */ String tag; public void setPayCallBack(IWXPayCallback callBack){ this.mCallBack = callBack; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, Constants.APP_ID); api.handleIntent(getIntent(),this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); } @Override public void onReq(BaseReq resp) { // 微信发送的请求回调 Log.d(WEIXIN_TAG,resp.getType()+""); } @Override public void onResp(BaseResp resp) { Intent intent = getIntent(); tag = intent.getStringExtra("_wxapi_payresp_extdata"); String msg = ""; // 发送到微信的请求回调 // 调后台接口获得请求参数调微信回调到这里 Log.d(WEIXIN_TAG,"onPayFinish ,errCode = " + resp.errCode); switch (resp.getType()){ case ConstantsAPI.COMMAND_PAY_BY_WX: IWXPayCallback payCallback = App.payCallback.get(tag); // 如有异常 if(resp.errStr!=null) Log.e(WEIXIN_TAG,resp.errStr); switch (resp.errCode){ case 0: msg="支付成功!"; if(payCallback!=null) payCallback.onPaySuccess(); break; case -1: msg="支付失败!"; if(payCallback!=null) payCallback.onPayFailed(); break; case -2: msg="取消支付"; if(payCallback!=null) payCallback.onPayCanceled(); break; } break; } // ToastUtils.toast(this,msg); WXPayEntryActivity.this.finish(); }
根据文档上demo的方法 获得这几个字段数据。(一般可以根据自己后台接口中得到不需要自己去计算。)
9. 微信支付的关键代码
![1P2PF]3X(H~XLQ(53}2LAP8.png](http://upload-images.jianshu.io/upload_images/3999297-b8f3f061b79a9c7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(如果签名正确 则可以直接调微信客户端支付 回掉那个Activity中的接口
一般错误吗 为-1 肯定是签名的问题相信我)
最后
![ZSBIDV$J9XF0X606GIZ_WT.png
你懂的 不要忘记注册 和权限 demo中有。
电脑没电了 就到这里了 如果有问题可以联系我qq 827746955
第一次使用markdown排版也很丑 见谅啦~ 睡觉了 ~ 明天还加班呢~