>

导入demo中可能会遇到的开发环境版本问题澳门博

- 编辑:澳门博发娱乐官网 -

导入demo中可能会遇到的开发环境版本问题澳门博

四:导入开发SDK

导入sdk流程同支付宝导入流程一样,这里就借用支付宝导入流程进行介绍。

  • 工程所需的微信支付SDK,如下图:澳门博发娱乐官网 1导入工程的SDK文件
  • 微信支付所需的相关用户信息

步骤3:在清单文件中注册相应的组件

  • Ping++ SDK所需要注册
<activity
  android:name="com.pingplusplus.android.PaymentActivity"
  android:configChanges="orientation|keyboardHidden|navigation|screenSize"
  android:launchMode="singleTop"
  android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
  • 微信支付需要注册
    <font color='red'> 注:
    1. 需要将以下"替换成自己APK的包名"换成在微信平台上注册填写的包名
    2. WxPayEntryActivity这个类在SDK内部实现,开发者不需要额外实现该类
      </font>
<activity-alias
    android:name="替换成自己APK的包名.wxapi.WXPayEntryActivity"
    android:exported="true"
    android:targetActivity="com.pingplusplus.android.PaymentActivity" />
  • 支付宝支付需要注册
<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind" >
</activity>
<activity
    android:name="com.alipay.sdk.auth.AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize" 
    android:exported="false"
    android:screenOrientation="behind" >
</activity>
  • 银联支付需注册
<activity 
    android:name="com.unionpay.uppay.PayActivity" 
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"/>
  • QQ钱包需注册(scheme填写规则建议:qwallet + QQ钱包中的app_id)
<intent-filter>
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.BROWSABLE"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <data android:scheme="qwalletXXXXXXXX"/>
</intent-filter>

将以上代码添加到Ping++ SDK注册的Activity,如:

<activity
    android:name="com.pingplusplus.android.PaymentActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="qwallet1234567890"/>
    </intent-filter>

</activity>
  • 招行一网通需注册
<service android:name="cmb.pb.cmbsafe.CmbService" android:exported="false"/>
<activity
         android:name="cmb.pb.ui.PBKeyboardActivity"
         android:theme="@style/CmbDialogStyleBottom" />

(<font color='red'>招行一网通:需在string.xml中配置cmbkb_publickey字段,如:</font>)

<string name="cmbkb_publickey">填写自己的publickey</string>
  • 百度钱包需注册(bfb渠道需注册、bfb_wap不需要注册)
<activity
   android:name="com.baidu.paysdk.login.LoginActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:exported="false"
   android:theme="@style/EbpayThemeActivityWelcome"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.WelcomeActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivityWelcome"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.OrderHomeActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:hardwareAccelerated="false"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.PayResultActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.PcPwdCheckActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible" />
<activity
   android:name="com.baidu.paysdk.ui.PwdCheckActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible" />
<activity
   android:name="com.baidu.paysdk.ui.PwdSetAndConfirmActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible" />
<activity
   android:name="com.baidu.paysdk.ui.PwdPayActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivitTranslucent"
   android:windowSoftInputMode="stateVisible|adjustResize" />
<activity
   android:name="com.baidu.paysdk.ui.PwdPaySmsActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivitTranslucent"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.WebViewActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.BindCardNoActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:launchMode="singleTask"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.BindCardDetailActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:launchMode="singleTask"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible|adjustPan" />
<activity
   android:name="com.baidu.paysdk.ui.BindCardDetailCredit2Activity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:launchMode="singleTask"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible|adjustPan" />
<activity
   android:name="com.baidu.paysdk.ui.BindCardDetailCreditActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:launchMode="singleTask"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateVisible|adjustPan" />
<activity
   android:name="com.baidu.paysdk.ui.BindSmsActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="adjustResize" />
<activity
   android:name="com.baidu.paysdk.ui.SelectBindCardActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:screenOrientation="portrait"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />
<activity
   android:name="com.baidu.paysdk.ui.SignChannelListActivity"
   android:configChanges="keyboardHidden|navigation|orientation|screenSize"
   android:excludeFromRecents="true"
   android:hardwareAccelerated="false"
   android:theme="@style/EbpayThemeActivit"
   android:windowSoftInputMode="stateHidden" />

4.5 调用支付接口

在调用银联支付类里面,首先增加头文件引用。

#import "UPPaymentControl.h"

在调起支付的方法中代码如下:

//当获得的tn不为空时,调用支付接口if (tn != nil && tn.length > 0) { [[UPPaymentControl defaultControl]startPay:tn fromScheme:@"URL Scheme" mode:tnModel viewController:self];}

方法需要的几个参数文档上都写的有,tn是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的。只需要调用一个方法就行啦!!!

  • 添加工程所需的银联支付SDK,如下图:澳门博发娱乐官网 2导入工程中的SDK

4.1 如果项目开发使用的Eclipse软件,导入步骤如下:

1.将alipaySDK-20150602.jar包放入商户应用工程的libs目录下,如下图。

201.png

2.进入商户应用工程的Java Build Path,将libs目录下的alipaySDK-20150602.jar导入,如下图。

202.png

3.选中Order and Export,勾选alipaySDK-20150602.jar,如下图。

203.png

将上图的支付宝sdk更换成银联控件支付的两个jar包即可

103.png

6 . 最后在Appdelegate.m文件中添加微信支付结果 onResp 回调方法,非常重要:给后台发送数据进行后台数据的更新(*例如:充值浩方Vip会员,微信钱包钱已经扣了,而后台没有收到信息,钱不就白花了

    • 、*),如下:

<span id = "issue2">问题二:与其他第三方SDK有冲突(如:友盟SDK)</span>

  • 报错Log:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
com.android.build.api.transform.TransformException: 
java.util.zip.ZipException: duplicate entry: a/a/a/a.class
  • 报错原因:

    1. 没有加过滤混淆的代码
    2. 有重复的jar包存在
  • 解决方案:

    1. 加上混淆过滤的代码(出现a/a/a/a.class的log时)
    2. 删除重复的jar包(可以是第三方SDK中的,也可以是Ping++SDK中的jar包)

流程图说明: 用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台; 商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台; 银联后台接收订单信息并检查通过后,生成对应交易流水号,并回复至商户后台(应答要素:交易流水号等); 商户后台接收到交易流水号,将交易流水号返回至客户端; 客户端通过交易流水号调用支付控件; 用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求; 支付成功后,银联后台将支付结果通知给商户后台; 银联后台同时也将支付结果通知支付控件; 支付控件显示支付结果并将支付结果返回至客户端; 此处备注:我们是通过后台获取订单,我们可以根据商品id等信息通过后台接口获取订单信息,对订单支付流程的签名加密过程后台完成。

三:下载银联SDK

银联手机控件支付SDK

下载之后,找到两个jar包,将UPPayAssistEx.jar和UPPayPluginExPro.jar添加到商户应用的工程中

SDK路径

SDK路径

步骤1:添加相应的依赖到项目中

<font color='red'>(注:依赖渠道SDK时,可能会和其他第三方SDK有冲突,移除依赖冲突的包就可以.如:问题二、问题三)</font>

下载之后,找到.h文件和库文件,使用UPPaymentControl需要将paymentcontrol/inc目录下UPPaymentControl.h文件和paymentcontrol/libs目录下的libPaymentControl.a文件添加到商户应用的工程中

注:mode:@"00"为正式版本支付模式, mode:@"01"为测试版本支付模式,官方给的有测试账号,如下图:

二:支付流程介绍

通过支付控件进行交易的流程如下图:

业务流程图

流程图说明:
  (1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台;
  (2)商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台;
  (3)银联后台接收订单信息并检查通过后,生成对应交易流水号(即TN),并回复至商户后台(应答要素:交易流水号等);
  (4)商户后台接收到交易流水号(TN),将交易流水号返回至客户端;
  (5)客户端通过交易流水号(TN)调用支付控件;
  (6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;
  (7)支付成功后,银联后台将支付结果通知给商户后台;
  (8)银联后台同时也将支付结果通知支付控件;
  (9)支付控件显示支付结果并将支付结果返回至客户端;
  此处备注:我们是通过后台获取订单,我们可以根据商品id等信息通过后台接口获取订单信息,对订单支付流程的签名加密过程后台完成。

2 . 在项目属性中的URL Types中添加URL Schemes,如图中标红位置所示。

步骤4:获取到charge/order后,调起支付

4.6 支付结果回调

在支付成功之后,支付结果返回,需要获取url,需要在Appdelegate中完成在Appdelegate里面,首先增加头文件引用。

#import "UPPaymentControl.h"

代码如下:

- application:(UIApplication *)application openURL:url sourceApplication:(NSString *)sourceApplication annotation:annotation { if ([url.host isEqualToString:@"uppayresult"]){ //银联支付结果 [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { //结果code为成功时,先校验签名,校验成功后做后续处理 if([code isEqualToString:@"success"]) { //交易成功 }else if([code isEqualToString:@"fail"]) { //交易失败 }else if([code isEqualToString:@"cancel"]) { //交易取消 } }]; } return YES;}// NOTE: 9.0以后使用新API接口- application:(UIApplication *)app openURL:url options:(NSDictionary<NSString*, id> *)options{ if ([url.host isEqualToString:@"uppayresult"]){ //银联支付结果 [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { //结果code为成功时,先校验签名,校验成功后做后续处理 if([code isEqualToString:@"success"]) { //交易成功 }else if([code isEqualToString:@"fail"]) { //交易失败 }else if([code isEqualToString:@"cancel"]) { //交易取消 } }]; } return YES;}

注:支付成功后,往后台发送数据是必需的,对后台数据进行相应的更新

  • 对于以上分享的支付方法,仔细琢磨一下,发现有漏洞。通过第三方支付,如果支付成功返回App之后,此时网络突然出现问题,不能往后台正常发送相应数据,导致后台数据更新不了,可是银子已经扣过,这不是要挂的节奏么(求高人指点,如何避免此种BUG)。
  • 鉴于上个项目中各种单个支付方法,太过累赘,对于目前开发的项目启用Ping++支付方法,度娘解释:Ping++ 是上海简米网络科技有限公司旗下的移动支付 SDK 产品,整合了目前市面上各种支付渠道。
  • Ping++支付分享,待续...

一:介绍

项目中要用到支付功能,需要支付宝支付、微信支付、银联支付,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。
今天我们就主要介绍一下银联控件支付,其他支付也写了对应教程,并且给出了连接。

集成前首先要看看文档,银联手机控件支付,里面包含需要的库文件和详细的文档。鉴于小伙伴们不容易找到,好事做到底,送上截图方便下载。

银联手机控件SDK

4.配置DataMD5.m文件,本地对签名进行二次加密,如果忽略这个步骤,就会造成调起微信支付,只出现一个确定按钮。注:之前出现这个问题,被卡壳了两天才发现,FK。

方法二(适用AndroidStudio、eclipse):下载lib包导入:

在lib包中的libpingpp下存在支付渠道所需的jar包和资源包

  • Ping++依赖包:libpingpp-x.x.x、res资源文件和libpingpp.so文件(<font color='red'>必须依赖的</font>)
  • 微信依赖包:libammsdk.jar
  • 支付宝依赖包:alipayxxxxxxxx.jar
  • 银联支付依赖包:UPPayAssisEx.jar、UPPayPluginExPro.jar、assets下data.bin文件和libentryexpro.so、libuptsmaddon.so文件
  • QQ钱包依赖包:mqqopenpay.jar
  • 招行一网通:cmbkeyboard.jar和res下cmb开头的资源文件
  • 百度钱包:在根目录中的lib下bd_wallet_pay_sdk依赖包

将需要集成的渠道拷贝相应的文件到项目中

项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。今天我们就主要介绍一下银联控件支付,其他支付也写了对应教程,并且给出了连接。

本文由胜博发-编程发布,转载请注明来源:导入demo中可能会遇到的开发环境版本问题澳门博